package com.bjpowernode.controller;

import com.bjpowernode.beans.DictionaryType;
import com.bjpowernode.exception.MyLengthException;
import com.bjpowernode.services.DictionaryTypeServices;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.UUID;

@RestController
@RequestMapping("/DictionaryType")
public class DictionaryTypeController {
    @Autowired
    DictionaryTypeServices dictionaryTypeServices;

    @RequestMapping("getAll.action")
    public ArrayList<DictionaryType> getAll(HttpServletRequest res) {
        HttpSession httpSession=res.getSession();
        System.out.println("httpSession:"+httpSession.getId());
        ArrayList<DictionaryType> all = dictionaryTypeServices.getAll();
        return all;
    }


    @RequestMapping("add.action")
    public HashMap<String, Object> add(DictionaryType dictionaryType) throws MyLengthException, SQLException {
        //补充UUID
        String uuid = UUID.randomUUID().toString();
        dictionaryType.setCode(uuid);
        if (dictionaryType.getName().length() > 20) {
            throw new MyLengthException("名称的长度不能大于20");
        }

        if (dictionaryType.getDescription().length() > 50) {
            throw new MyLengthException("描述的长度不能大于50");
        }

        HashMap<String, Object> map = new HashMap<>();

        try {
            //mybatis会自己报SQL异常
            int add = dictionaryTypeServices.add(dictionaryType);
            //SQL语法不会错误，只是影响行数的错误（比如删除的没有的ID）
            if (add > 0) {
                map.put("result", "success");
            } else {
                //这里直接抛出异常SQLException（因为增强要抓）
                throw new SQLException("由于业务逻辑错误，则数据库添加影响行数异常");
            }
        } catch (Exception exception) {
            //QL语法错误，那么mybatis会率先抛出一个具体的SQL异常
            //所以这里我们需要在控制器中使用catch消耗掉mybatis抛出的异常
            //那么这个时候，我们可以在消耗掉mybatis抛出的异常之后再次抛出一个异常提供给增强控制器
            //因为这个时候我们需要增强控制器报告精准的错误
            throw new SQLException("由于SQL语句错误，则我们需要再次抛出一个异常交给增强控制器，数据库添加影响行数异常");
        }
        return map;
    }

    //前端传递数组对象，必须使用JSON格式，那么后端需要使用@RequestBody来接受JSON格式
    @RequestMapping("del.action")
    public HashMap<String, Object> del(@RequestBody String[] ids) throws SQLException {
        System.out.println(ids);
        HashMap<String, Object> map = new HashMap<>();
        try {
            //mybatis会自己报SQL异常
            int del = dictionaryTypeServices.del(ids);
           //SQL语法不会错误，只是影响行数的错误（比如删除的没有的ID）
            if (del > 0) {
                map.put("result", "success");
            } else {
                //这里直接抛出异常SQLException（因为增强要抓）
                throw new SQLException("由于业务逻辑错误，则数据库删除影响行数异常");
            }

        } catch (Exception exception) {
            //QL语法错误，那么mybatis会率先抛出一个具体的SQL异常
            //所以这里我们需要在控制器中使用catch消耗掉mybatis抛出的异常
            //那么这个时候，我们可以在消耗掉mybatis抛出的异常之后再次抛出一个异常提供给增强控制器
            //因为这个时候我们需要增强控制器报告精准的错误
            throw new SQLException("由于SQL语句错误，则我们需要再次抛出一个异常交给增强控制器，数据库删除影响行数异常");
        }
        return map;
    }

    //修改之前
    @RequestMapping("editBefore.action")
    public DictionaryType editBefore(String id) {
        DictionaryType dictionaryType = dictionaryTypeServices.get(id);
        return dictionaryType;
    }

    //修改
    @RequestMapping("edit.action")
    public HashMap<String, Object> edit(DictionaryType dictionaryType) {
        int edit = dictionaryTypeServices.edit(dictionaryType);
        HashMap<String, Object> map = new HashMap<>();
        if (edit > 0) {
            map.put("result", "success");
        } else {
            map.put("result", "error");
            map.put("mess", "编辑失败");
        }
        return map;
    }


}
